package com.work.yshop.mvp.contract;

import com.work.yshop.model.Article;

import java.util.List;

/**
 * 农技学堂页面的契约类，定义View和Presenter的接口
 */
public interface AgriTechContract {

    /**
     * View接口，由Activity实现
     */
    interface View {
        /**
         * 显示加载中状态
         */
        void showLoading();
        
        /**
         * 隐藏加载中状态
         */
        void hideLoading();
        
        /**
         * 显示文章列表
         */
        void showArticles(List<Article> articles);
        
        /**
         * 显示空结果状态
         */
        void showEmptyView();
        
        /**
         * 显示错误信息
         */
        void showError(String message);
        
        /**
         * 跳转到文章详情页
         */
        void navigateToArticleDetail(Article article);
        
        /**
         * 跳转到添加文章页面
         */
        void navigateToAddArticle();
    }
    
    /**
     * Presenter接口，由Presenter实现
     */
    interface Presenter {
        /**
         * 绑定View
         */
        void attachView(View view);
        
        /**
         * 解绑View
         */
        void detachView();
        
        /**
         * 加载文章列表
         */
        void loadArticles();
        
        /**
         * 根据分类加载文章
         */
        void loadArticlesByCategory(String category);
        
        /**
         * 刷新文章列表
         */
        void refreshArticles();
        
        /**
         * 处理文章点击事件
         */
        void onArticleClick(Article article);
        
        /**
         * 处理添加文章按钮点击事件
         */
        void onAddArticleClick();
    }
    
    /**
     * 数据源接口
     */
    interface DataSource {
        /**
         * 获取文章列表
         */
        void getArticles(String category, LoadCallback<List<Article>> callback);
        
        /**
         * 获取文章详情
         */
        void getArticleById(int id, LoadCallback<Article> callback);
        
        /**
         * 发布文章
         */
        void publishArticle(Article article, LoadCallback<Boolean> callback);
    }
    
    /**
     * 回调接口
     */
    interface LoadCallback<T> {
        /**
         * 加载成功
         */
        void onLoaded(T data);
        
        /**
         * 加载失败
         */
        void onError(String message);
    }
} 